package com.huike.springboot1.demos.controller;

import com.huike.springboot1.demos.Mapper.UserMapper;
import com.huike.springboot1.demos.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;
import java.util.Calendar;
import java.util.Random;

//控制层
@Controller
public class LoginController {
    @Autowired
    UserMapper userMapper;
    @GetMapping("/toLogin")
    public String toLogin(Model model) {
//        添加属性，返回currentYear属性数值
        model.addAttribute("currentYear", Calendar.getInstance().get(Calendar.YEAR));
        return "login";//返回到的页面
    }

    // Spring-MVC 的映射注解属性：
//     produces = "text/html;charset=utf-8"：浏览器收到后会把返回字符串按 HTML 解析，而不是纯文本
    @PostMapping(value = "/login", produces = "text/html;charset=utf-8")
    @ResponseBody
//    如果两端参数名称不同则用@RequestParam注解括起
//    因为创建了User对象所以能直接使用(UserMapper userMapper,可省略创建对象过程)，
//          在前端form表单中收集input的name属性值和User类中的成员变量相同
    public String login(User user, HttpSession session) {
//        System.out.println(user);
        User user1 = userMapper.signSelect(user);
        if (user1 == null) {
            return "账号或密码错误，<a href='/toLogin'>返回上一页</a>";
        } else {
            session.setAttribute("loginUser", user);
            return "登录成功！<a href='/productList1'>进入首页</a>";
        }
    }

    @GetMapping("/toRegister")
    public String toRegister(Model model, HttpSession session) {
        Random rand = new Random();
        char[] xxx = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
                'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
                '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};//去掉小写字母l，大写字母O
        String yy = "";
        for (int i = 0; i < 4; i++) {
            yy += xxx[rand.nextInt(60)];//60个
        }
        session.setAttribute("reCaptcha", yy);
        model.addAttribute("captcha", yy);
//        添加属性，返回currentYear属性数值
        model.addAttribute("currentYear", Calendar.getInstance().get(Calendar.YEAR));
        return "register";//返回到的页面
    }

    //     Spring-MVC 的映射注解属性：
//     produces = "text/html;charset=utf-8"：浏览器收到后会把返回字符串按 HTML 解析，而不是纯文本
    @PostMapping(value = "/register", produces = "text/html;charset=utf-8")
    @ResponseBody
//    如果两端参数名称不同则用@RequestParam注解括起
    public String register(User user, @RequestParam("captcha") String captcha, // 用户输入
                           HttpSession session) {
        String realCaptcha = (String) session.getAttribute("reCaptcha");
        int count=userMapper.checkSelect(user);
        if (!realCaptcha.equals(captcha)||count>0) {
            if (!realCaptcha.equals(captcha)){
                return "验证码错误，<a href='/toRegister'>返回上一页</a>";
            }
            else {
                return "用户已存在，<a href='/toRegister'>返回上一页</a>";
            }
        }
        else{
            userMapper.registerInsert(user);
            return "注册成功！<a href='/toLogin'>回到登录页面</a>";
        }
    }
    @GetMapping("/toAdmin")
    public String toAdmin(Model model) {
//        添加属性，返回currentYear属性数值
        model.addAttribute("users", userMapper.userSelect());
        return "admin/admin";//返回到的页面
    }
    @DeleteMapping("/deleteUser")
    @ResponseBody
    public String deleteUser(Long id, Model model) {
//        增删改一条数据操作，不需要返回类型，在数据库中增删改一条数据就是返回int的数字类型的行数，没有返回数据类型的意义
        userMapper.deleteUserById(id);
//        System.out.println("OK");
        model.addAttribute("user", userMapper.userSelect());
        return "OK";
    }


}

